package leetcode;

public class p622设计循环队列 {
    //其操作表现基于 FIFO（先进先出）原则并且队尾被连接在队首之后以形成一个循环
    //用数组array实现循环队列
    private int[] array;
    private int frontindex;//队首下标
    private int rearindex;//队尾下标
    private int size;

    public p622设计循环队列(int k) {
        //初始化容量为k的循环队列
        array=new int[k];
        frontindex=0;
        rearindex=0;
        size=0;
    }

    public boolean enQueue(int value) {
        //向循环队列插入一个元素
        if(size==array.length) {
            return false;
        }
        array[rearindex]=value;
        rearindex=(rearindex+1)%array.length;
        size++;
        return true;

    }

    public boolean deQueue() {
        //从循环队列中删除一个元素
        if(size==0) {
            return false;
        }
        //队首下标直接后移
        frontindex=(frontindex+1)%array.length;
        size--;
        return true;

    }

    public int Front() {
        // 从队首获取元素。如果队列为空，返回 -1
        if(size==0) {
            return -1;
        }
        return array[frontindex];

    }

    public int Rear() {
        // 获取队尾元素。如果队列为空，返回 -1
        if(size==0) {
            return -1;
        }
        //查找队尾元素所在下标
        int i=(rearindex+array.length-1)%array.length;
        return array[i];
    }

    public boolean isEmpty() {
        //检查循环队列是否为空
        return size==0;

    }

    public boolean isFull() {
        //检查循环队列是否已满
        return size==array.length;

    }
}
